package com.wei800.common.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

public class UploadFileUtils { // 上传工具类
    private static final Logger LOGGER = LoggerFactory.getLogger(UploadFileUtils.class);
    public static final String NO_PHOTO = "nophoto.png"; // 默认文件名称
    private UploadFileUtils() {} // 构造方法隐藏

    /**
     * 上传文件存储处理，在文件保存的时候会根据UUID生成新的文件名称，并保存在指定的目录之中
     * @param file 待上传的文件
     * @param saveDir 保存的目录
     * @return 生成的文件名称
     */
    public static String save(MultipartFile file, String saveDir) {
        if (file == null || file.getSize() == 0) {  // 没有上传文件
            return NO_PHOTO; // 返回默认的文件名称
        }
        String fileName = UUID.randomUUID() + "." + file.getContentType()
                .substring(file.getContentType().lastIndexOf("/") + 1); // 创建文件名称
        LOGGER.debug("生成文件名称：{}", fileName);
        save(file, saveDir, fileName);
        return fileName;
    }
    public static boolean save(MultipartFile file, String saveDir, String fileName) {
        String filePath = ContextLoader.getCurrentWebApplicationContext()
                .getServletContext().getRealPath(saveDir) + File.separator + fileName;
        LOGGER.info("文件存储路径：{}", filePath);
        try {
            file.transferTo(new File(filePath));
        } catch (IOException e) {
            LOGGER.error("文件存储失败：{}", e.getMessage());
            return false;
        }
        return true;
    }
    public static boolean delete(String saveDir, String fileName) {
        if (!StringUtils.hasLength(fileName)) { // 文件名称不存在
            return true; // 文件不存在直接返回成功
        }
        if (NO_PHOTO.equals(fileName)) {    // 默认的文件名称
            return true; // 默认文件不删除
        }
        String filePath = ContextLoader.getCurrentWebApplicationContext()
                .getServletContext().getRealPath(saveDir) + File.separator + fileName;
        File file = new File(filePath);
        if (file.exists()) { // 文件存在
            return file.delete(); // 删除文件
        }
        return true;
    }
}
